package main

import "fmt"

func main() {

	//	1.创建一个结构体
	var zf Teacher
	//var lcl Teacher
	//var hh Teacher

	fmt.Println(zf)
	zf.Age = 18
	zf.School = "hgnc"
	zf.Name = "不爱吃饭的文轩"
	fmt.Println(zf)
	fmt.Println(zf.Name)

	fmt.Println("-----------------------------------------------------")

	//	2.结构体实例的创建
	var teacher = Teacher{"a", 1, "b"}
	fmt.Println(teacher)

	fmt.Println("-----------------------------------------------------")
	//	3.使用new关键字创建结构体对象，
	var t = new(Teacher)
	fmt.Println(t)
	// 实际上应该这样赋值
	(*t).Age = 19
	(*t).Name = "luoww"
	(*t).School = "hgnc"
	fmt.Println(*t)

	//	官方为了简化， 没有必要每次都用星号来取到实际对象，再赋值，可以直接
	t.Age = 22
	t.School = "oh my gad"
	fmt.Println(*t)

	//	4.使用取地址符 创建
	var u *Teacher = &Teacher{}
	u.Name = "张三"
	u.Age = 96
	u.School = "中南财政"
	fmt.Println(*t)

}

// Teacher 定义老师结构体，将老师的各个属性 统一放入结构体中管理
type Teacher struct {
	Name   string
	Age    int
	School string
}
